<template>
  <div class="container">
    <div class="main">
      <div class="pay-title">
        支付总金额 <span class="pay-price">￥ {{info.price}}</span>
      </div>
      <div class="pay-main">
        <h4>微信支付</h4>
        <el-row
          type="flex"
          justify="space-between"
          align="middle"
          class="pay-qrcode"
        >
          <div class="qrcode">
            <!-- 二维码 -->
            <canvas ref="erweima"></canvas>
            <p>请使用微信扫一扫</p>
            <p>扫描二维码支付</p>
          </div>
          <div class="pay-example">
            <img
              src="http://157.122.54.189:9093/images/wx-sweep2.jpg"
              alt=""
            >
          </div>
        </el-row>
      </div>
    </div>
  </div>
</template>

<script>
import QRCode from "qrcode";
import { airordersByid, checkpay } from "@/api/air";
export default {
  data() {
    return {
      info: {},
      timer: null,
    };
  },
  watch: {
    "$store.state.user.userInfo.token": {
      async handler() {
        if (this.$store.state.user.userInfo.token) {
          const token = this.$store.state.user.userInfo.token;
          let res = await airordersByid(this.$route.query.id, token);
          if (res) {
            this.info = res.data;
            console.log(this.info);
            QRCode.toCanvas(this.$refs.erweima, this.info.payInfo.code_url, {
              width: 300,
            });
            const data = {
              id: this.info.id,
              nonce_str: this.info.price,
              out_trade_no: this.info.order_no,
            };
            this.checkpay(data, token);
          }
        }
      },
      immediate: true,
    },
  },
  // async created() {
  //   const { id } = this.$route.query;
  //   const token = this.$store.state.user.userInfo.token;
  //   let res = await airordersByid(id, token);
  //   console.log(res);
  //   if (res.data) {
  //     this.info = res.data;
  //     QRCode.toCanvas(this.$refs.erweima, res.payInfo.code_url, {
  //       width: 200,
  //     });
  //     const token = this.$store.state.user.userInfo.token;
  //     let data = {
  //       id: this.info.id,
  //       nonce_str: this.info.price,
  //       out_trade_no: this.info.order_no,
  //     };
  //     this.checkpay(data, token);
  //   }
  // },
  methods: {
    async checkpay(data, token) {
      let res = await checkpay(data, token);
      if (res) {
        if (res.data.trade_state !== "SUCCESS") {
          this.timer = setTimeout(() => {
            this.checkpay(data, token);
          }, 3000);
        } else {
          this.$message.success("支付成功");
        }
      }
    },
  },
  destroyed() {
    // 这跟 created / mounted 一样都是一个生命周期
    // 在销毁组件的时候触发,
    // 可以讲不能带到别的页面的东西在这里一并销毁即可
    // 这时候页面跳出, 需要清理定时器
    // 避免轮询无法停止
    console.log("跳出页面, 定时器被清理了");
    clearTimeout(this.timer);
  },
};
</script>

<style scoped lang="less">
.container {
  background: #f5f5f5;
  padding: 30px 0;

  .main {
    width: 1000px;
    margin: 0 auto;

    .pay-title {
      text-align: right;
      span {
        font-size: 28px;
        color: orangered;
      }
    }

    .pay-main {
      background: #fff;
      margin-top: 10px;
      border-top: 5px orange solid;
      padding: 30px;

      h4 {
        font-size: 28px;
        font-weight: normal;
        margin-bottom: 10px;
      }

      .pay-qrcode {
        padding: 0 80px;
      }

      .qrcode {
        border: 1px #ddd solid;
        padding: 15px;
        height: fit-content;

        #qrcode-stage {
          width: 200px;
          height: 200px;
          margin-bottom: 10px;
        }

        p {
          line-height: 2;
          text-align: center;
        }
      }
    }
  }
}
</style>